package com.jcark.utilscode;

import android.content.Context;

import androidx.annotation.NonNull;

/**
 * Description:屏幕控件大小计算工具类 <br>
 *
 * @author King.Zi<br>
 * @date 2022/1/15<br>
 * Email: 78688689@qq.com
 */
public class ScreenSizeUtils {
    private ScreenSizeUtils() {
    }

    public class UIDesign {
        /**
         * 设计图宽度(DP)
         */
        public static final int WIDTH_375DP = 375;
        /**
         * 设计图高度(DP)
         */
        public static final int HEIGHT_812DP = 812;
    }

    /**
     * 获取屏幕宽度
     *
     * @param context 上下文
     * @return 宽px
     */
    public static int getScreenWidth(@NonNull Context context) {
        return context.getResources().getDisplayMetrics().widthPixels;
    }

    /**
     * 获取屏幕高度
     *
     * @param context 上下文
     * @return 高px
     */
    public static int getScreenHeight(@NonNull Context context) {
        return context.getResources().getDisplayMetrics().heightPixels;
    }

    /**
     * 获取在设备屏幕上的实际大小(宽度)
     *
     * @param context          上下文
     * @param designTotalWidth 设计图总宽度,单位必须为dp，可使用{@link UIDesign}
     * @param designSize       设计图上大小，单位必须为dp
     * @return 屏幕上的实际宽度
     */
    public static int getViewScreenWidthSize(@NonNull Context context, float designTotalWidth, float designSize) {
        return (int) (getScreenUIDesignWidthScale(context, designTotalWidth) * designSize);
    }

    /**
     * 获取在设备屏幕上的实际大小(宽度，默认设计图总宽度为375)
     *
     * @param context    上下文
     * @param designSize 设计图上大小，单位必须为dp
     * @return 屏幕实际宽度
     */
    public static int getViewScreenWidthSize(@NonNull Context context, float designSize) {
        return (int) (getScreenUIDesignWidthScale(context, UIDesign.WIDTH_375DP) * designSize);
    }

    /**
     * 获取屏幕与设计图的比例（宽度）
     *
     * @param context          上下文
     * @param designTotalWidth 设计图总宽度,单位必须为dp，可使用{@link UIDesign}
     * @return 屏幕与设计图的比例（宽度）
     */
    public static float getScreenUIDesignWidthScale(@NonNull Context context, float designTotalWidth) {
        return getScreenWidth(context) / designTotalWidth;
    }

    /**
     * 获取屏幕与设计图的比例（高度）
     *
     * @param context           上下文
     * @param designTotalHeight 设计图总高度,单位必须为dp，可使用{@link UIDesign}
     * @return 屏幕与设计图的比例（高度）
     */
    public static float getScreenUIDesignHeightScale(@NonNull Context context, float designTotalHeight) {
        return getScreenHeight(context) / designTotalHeight;
    }

    /**
     * 获取在设备屏幕上的实际大小(高度,默认设计图总高度为812)
     *
     * @param context    上下文
     * @param designSize 设计图上大小，单位必须为dp
     * @return 屏幕上的实际高度
     */
    public static int getViewScreenHeightSize(@NonNull Context context, float designSize) {
        return (int) (getScreenUIDesignHeightScale(context, UIDesign.HEIGHT_812DP) * designSize);
    }

    /**
     * 获取在设备屏幕上的实际大小(高度)
     *
     * @param context           上下文
     * @param designTotalHeight 设计图总高度,单位必须为dp，可使用{@link UIDesign}
     * @param designSize        设计图上大小，单位必须为dp
     * @return 屏幕上的实际高度
     */
    public static int getViewScreenHeightSize(@NonNull Context context, float designTotalHeight, float designSize) {
        return (int) (getScreenUIDesignHeightScale(context, designTotalHeight) * designSize);
    }
}
